package cn.edu.lingnan.mapper;

import cn.edu.lingnan.user.dtos.AddPaperQuestionDto;
import cn.edu.lingnan.user.dtos.ListPaperDto;
import cn.edu.lingnan.user.pojos.Paper;
import cn.edu.lingnan.user.pojos.QuestionStore;
import cn.edu.lingnan.user.vos.OptionVO;
import cn.edu.lingnan.user.vos.PaperWithQuestionVo;
import cn.edu.lingnan.user.vos.QuestionVO;
import cn.edu.lingnan.user.vos.StoreVo;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface PaperMapper {
    Page<Paper> list(ListPaperDto listPaperDto);

    void addPaper(Paper paper);

    void deletePaperQuestion(Integer paperId);

    void deletePaper(Integer paperId);

    @Select("SELECT * FROM tb_exam_system.t_paper WHERE paper_id = #{paperId}")
    Paper getPaperById(Integer paperId);

    void updatePaper(Paper paper);
    PaperWithQuestionVo getPaperWithQuestionVo(@Param("paperId") Integer paperId);

    List<QuestionVO> selectQuestionsByPaperId(@Param("value") Integer paperId);

    List<OptionVO> selectOptionsByQuestionId(@Param("value") Integer questionId);


    List<StoreVo> getQuestionBankList(Integer userId);

    /**
     * 根据 paperId 和 questionIds，查询哪些题目已经存在关联
     */
    List<Integer> findExistQuestionIds(@Param("paperId") Integer paperId,
                                    @Param("questionIds") List<Integer> questionIds);

    /**
     * 批量插入不存在的题目
     */
    int batchInsertPaperQuestion(@Param("paperId") Integer paperId,
                                 @Param("questionIds") List<Integer> questionIds);

    void deletePaperQuestionById(Integer paperId, Integer questionId);
}
